package com.yczlab.mybatis.dao;

import com.yczlab.mybatis.entity.Employee;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

@Mapper
public interface EmployeeDaoDynamicSql {

    /**
     * 携带了哪些个字段作为查询条件就同时带上这些个字段的值作为查询条件
     * @param map
     * @return List<Employee>
     */
    public List<Employee> getEmpsByConditionIf(Map<String, Object> map);

    /**
     * 携带了哪些个字段作为查询条件就同时带上这些个字段的值作为查询条件
     * @param map
     * @return List<Employee>
     */
    public List<Employee> getEmpsByConditionTrim(Map<String, Object> map);

    /**
     * 携带了哪个字段作为查询条件，就以该字段作为单查询条件
     * @param map
     * @return List<Employee>
     */
    public List<Employee> getEmpsByConditionChoose(Map<String, Object> map);

    /**
     * 更新员工信息，哪些属性有值，就更新哪些对应的列。（以员工id作为寻找目标）
     * @param employee
     * @return boolean
     */
    public boolean updateEmp(Employee employee);

    /**
     * 按照指定的一批员工id查出相应的员工信息
     *
     * @param empIds
     * @return List<Employee>
     */
    public List<Employee> getEmpsByConditionForeach(@Param("empIds") List<Integer> empIds);

    /**
     * 批量插入员工
     * @param emps
     * @return boolean
     */
    public boolean addEmps(@Param("emps") List<Employee> emps);

    /**
     * 使用Mybatis的内置参数完成查询
     * @return List<Employee>
     */
    public List<Employee> getAllEmpsInnerParam();
}
